package com.mask.token.model;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;

import java.time.Instant;

/**
 * Token信息
 * 存储Token的详细信息
 *
 * @author mask
 * @since 1.0.0
 */
@Data
public class TokenInfo {

    /**
     * Token字符串
     */
    private String token;

    /**
     * 用户ID
     */
    private Long userId;

    /**
     * 用户名
     */
    private String username;

    /**
     * 设备ID
     */
    private String deviceId;

    /**
     * 登录时间
     */
    private Instant loginTime;

    /**
     * 过期时间
     */
    private Instant expireTime;

    /**
     * 最后活跃时间
     */
    private Instant lastActiveTime;

    /**
     * 用户代理
     */
    private String userAgent;

    /**
     * 登录IP
     */
    private String loginIp;

    /**
     * 是否在线
     */
    private boolean online = true;

    public TokenInfo() {
        this.lastActiveTime = Instant.now();
    }

    /**
     * 更新最后活跃时间
     */
    public void updateLastActiveTime() {
        this.lastActiveTime = Instant.now();
    }

    /**
     * 检查Token是否过期
     */
    @JsonIgnore
    public boolean isExpired() {
        return Instant.now().isAfter(this.expireTime);
    }

    /**
     * 检查Token是否即将过期
     */
    @JsonIgnore
    public boolean isExpiringSoon(java.time.Duration threshold) {
        return Instant.now().plus(threshold).isAfter(this.expireTime);
    }
}
